EC2インスタンスのTomcatプロセスを監視する方法
EC2(Amazon Linux 2)にインストールしたtomcatのプロセスを監視する方法
困っていた内容
CloudWatchからtomcatプロセスを監視したいのですが、どうすればよいでしょうか?
CloudWatch Agentの設定ファイルにおいて、httpdの様にexeでtomcatと指定しても、正しく監視できていません。
どう対応すればいいの?
procstatプラグインの「pattern」を使用することで監視が可能です。
本記事では、実際の設定方法について解説します。
やってみた
前提
- CloudWatch Agentをセットアップが完了していること (SSMのParameter storeに設定を保存していること)
- tomcatがインストールされていること
手順
ドキュメントでは、以下の様に記載されています。
procstat プラグインでプロセスメトリクスを収集する - Amazon CloudWatch
・pattern: プロセスの起動に使用するコマンドラインでプロセスを選択します。
翻訳が微妙ではありますが、psコマンドないしsystemctlコマンドのstauts (-l)オプションを使用して、tomcatプロセスの起動指定を確認してみます。 以下の実行結果より「org.apache.catalina.startup.Bootstrap start」が使用されていることが確認できました。
[ec2-user@ip-172-31-44-146 ~]$ ps aux | grep tomcat tomcat 3520 8.6 7.6 2322052 77528 ? Ssl 09:16 0:02 /usr/lib/jvm/jre/bin/java -classpath /usr/share/tomcat/bin/bootstrap.jar:/usr/share/tomcat/bin/tomcat-juli.jar:/usr/share/java/commons-daemon.jar ★実際には以下内容が1行で表示されます -Dcatalina.base=/usr/share/tomcat -Dcatalina.home=/usr/share/tomcat -Djava.endorsed.dirs= -Djava.io.tmpdir=/var/cache/tomcat/temp -Djava.util.logging.config.file=/usr/share/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager org.apache.catalina.startup.Bootstrap start ★tomcatプロセスの起動指定 ec2-user 3574 0.0 0.0 119436 864 pts/0 S+ 09:17 0:00 grep --color=auto tomcat [ec2-user@ip-172-31-44-146 ~]$ systemctl status tomcat -l ● tomcat.service - Apache Tomcat Web Application Container Loaded: loaded (/usr/lib/systemd/system/tomcat.service; disabled; vendor preset: disabled) Active: active (running) since 土 2021-07-31 09:16:56 UTC; 3min 57s ago Main PID: 3520 (java) CGroup: /system.slice/tomcat.service └─3520 /usr/lib/jvm/jre/bin/java -classpath /usr/share/tomcat/bin/bootstrap.jar:/usr/share/tomcat/bin/tomcat-juli.jar:/usr/share/java/commons-daemon.jar ★実際には以下内容が1行で表示されます -Dcatalina.base=/usr/share/tomcat -Dcatalina.home=/usr/share/tomcat -Djava.endorsed.dirs= -Djava.io.tmpdir=/var/cache/tomcat/temp -Djava.util.logging.config.file=/usr/share/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager org.apache.catalina.startup.Bootstrap start ★tomcatプロセスの起動指定
続いて、Systems ManagerのマネジメントコンソールよりCloudWatch Agentのインストール時に指定した
パラメーター名を確認します。私はデフォルトで作成しているため、「AmazonCloudWatch-linux」となります。
「値」を以下の様に変更します。(「pattern」は、上記手順で確認した "org.apache.catalina.startup.Bootstrap start" を指定します)
なお、あくまでtomcatプロセスの監視が目的のため、最低限の内容に編集し直しています。
{ "metrics": { "metrics_collected": { "procstat": [ { "pattern": "org.apache.catalina.startup.Bootstrap start", "measurement": [ "pid_count" ], "metrics_collection_interval": 10 } ] } } }
最後に上記設定をインスタンスに反映します。
- マネジメントコンソールのSystems Manager
- サイドバーの「Run Command」をクリック
- 黄色いボタンの「Run Command」をクリック
- 検索ボックスより「AmazonCloudWatch-ManageAgent」を確認、ラジオボタンにチェック
- コマンドのパラメータを右記の様に修正「Action: configure(append)」「Optional Configuration Location: AmazonCloudWatch-linux」
- ターゲットより、tomcatが稼働しているインスタンスを指定
- 全て指定ができたら「実行」
以上で設定は完了です。
動作確認
CloudWatchメトリクスを確認します。
カスタム名前空間の「CWAgent」>「host,pattern,pid_finder」の順にクリックします。
正しく設定ができていれば、以下の様にメトリクスが確認できると思います。
(ラベル名がイケてないので、分かりやすいもの代えるとよいです。)
続いて、tomcatのサービスを停止して、正しくメトリクスに反映されているかを確認します。
[ec2-user@ip-172-31-44-146 ~]$ date; sudo systemctl stop tomcat 2021年 7月 31日 土曜日 19:23:39 JST [ec2-user@ip-172-31-44-146 ~]$ sudo systemctl status tomcat ● tomcat.service - Apache Tomcat Web Application Container Loaded: loaded (/usr/lib/systemd/system/tomcat.service; disabled; vendor preset: disabled) Active: inactive (dead) :
どうでしょうか。tomcatサービスを停止した時間にメトリクスが「0」になっていることが確認できたと思います。tomcatサービスの起動も試してみます。
[ec2-user@ip-172-31-44-146 ~]$ date; sudo systemctl start tomcat 2021年 7月 31日 土曜日 19:33:08 JST [ec2-user@ip-172-31-44-146 ~]$ sudo systemctl status tomcat ● tomcat.service - Apache Tomcat Web Application Container Loaded: loaded (/usr/lib/systemd/system/tomcat.service; disabled; vendor preset: disabled) Active: active (running) since 土 2021-07-31 19:33:08 JST; 8s ago :
いいですね。
tomcatサービスを起動した時間にメトリクスが「1」になっていることが確認できました。
正しくプロセス監視ができていますね。
締めのごあいさつ
という訳で、tomcatのプロセス監視方法をご紹介しました。
この記事がどなたかのお役に立ちましたら幸いです。